package com.pactera.madp.cp.client;

import com.dtflys.forest.annotation.*;
import com.pactera.madp.cp.api.dto.sync.SaLoginDTO;
import com.pactera.madp.cp.api.dto.sync.SaQueryDTO;
import com.pactera.madp.cp.api.vo.sync.SaTokenVO;

/**
 * @author Deming.Chang
 * @title 神策接口调用
 * @date 2022-05-10
 */
@Address(
        scheme = "#{madp.sa.scheme}",
        host = "#{madp.sa.host}",
        port = "#{madp.sa.port}"
)
public interface SaClient {

    /**
     * 获取神策平台账号凭证
     *
     * @param isGlobal 是否全局标识
     * @param project  神策项目
     * @param dto      登录对象
     * @return 神策账号凭证
     */
    @Post("/api/v2/auth/login")
    @Retry(maxRetryCount = "3", maxRetryInterval = "10")
    SaTokenVO login(@Query("is_global") String isGlobal,
                    @Query("project") String project,
                    @JSONBody SaLoginDTO dto);

    /**
     * 通过SQL查询神策采集事件数据
     *
     * @param token   神策账号凭证
     * @param project 神策项目
     * @param dto     查询对象
     * @return 神策采集事件对象
     * @notice 因神策自定义查询只返回数据，非标准JSON，因此直接返回字符串
     */
    @Post("/api/sql/query")
    @Retry(maxRetryCount = "3", maxRetryInterval = "10")
    String query(@Header("sensorsdata-token") String token,
               @Query("project") String project,
               @Body SaQueryDTO dto);
}
